package com.dd.stack.redis.service.inner.impl;

import com.dd.stack.common.util.Result;
import com.dd.stack.redis.pojo.DO.ProductDO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;

/**
 * @Author liuxianmeng
 * @CreateTime 2025/1/30 15:46
 * @Description ProductServiceImpl Redis简单缓存的使用
 */
@Service
public class ProductServiceImpl {

    @Autowired
    private RedisCacheServiceImpl redisCache;
    @Autowired
    private RedisCounterServiceImpl incrementProductCounter;

    private final HashMap<Long, Object> hm = new HashMap<>();

    {
        hm.put(1L, new ProductDO(1L, "firstP", 888.9));
        hm.put(2L, new ProductDO(2L, "secondP", 108.9));
        hm.put(3L, new ProductDO(3L, "thirdP", 2888.9));
    }

    // 获取商品信息
    public Result getProduct(Long id) {
        // 产品访问计数++
        incrementProductCounter.incrementProductCounter(id);
        // 首先尝试从缓存中获取
        ProductDO DO = redisCache.getProductFromCache(id);
        if (DO == null) {
            // 如果缓存中没有，从数据库中获取（这里假设数据库逻辑）
            DO = fetchProductFromDatabase(id);
            // 如果数据库也没有 则返回不存在结果
            if(DO == null) return Result.error(500, "此商品不存在");
            // 将获取到的商品信息存入缓存
            redisCache.cacheProduct(DO);
        }
        return Result.success(DO);
    }

    // 模拟从数据库获取商品信息
    private ProductDO fetchProductFromDatabase(Long id) {
        // 这里仅模拟返回一个商品对象
        return (ProductDO) hm.get(id);
    }
}
